在angular2项目的过程中,接触到了Rxjs这个东西,对它进行了一下简单的了解,对它的基本用法进行了学习和总结,介绍了:
- 基本概念
- 如何创建一个Observerble可观察序列
- Observer实例的生命周期
- 如何对Observer实例进行订阅?以及监听他的next、error、complete事件?
- rxjs交互图怎么看?
- map、filter、from等简单的操作符含义
它是什么
官方文档:http://reactivex.io/rxjs/
Rx(ReactiveX, Reactive Extensions),它是微软开发和维护的基于响应式编程(Reactive Programming)范式实现的一套工具库集合,于2012年11月开源,它提供了一系列接口规范来帮助开发者方便的处理异步数据流。Rx系列结合了观察者模式、迭代器模式、函数式编程,它已成为业界响应式编程的优秀实践。
RxJs就是Rx在JavaScript层面上的实现,除此之外还有RxJava、Rx.Net、RxSwift等等。
RxJs全名Reactive Extensions for JavaScript,翻译为Javascript的响应式扩展, 它的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(Observable Sequence),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好的各种转换和操作。
几个名词
Observable: 可观察的数据序列.Observer: 观察者实例,用来决定何时观察指定数据,只有在Rx.Observable.create创建方法可以获取Subscription: 观察数据序列返回的订阅实例.Operators: Observable的操作符,包括转换数据序列,过滤等,所有的Operators方法接受的参数是上一次发送的数据变更的值,而方法返回值我们称之为发射新数据变更
Observable可以发射三种类型的事件:next、error、completeSubscription可以订阅三种类型的事件:onNext onError onCompleteObservable有四个生命周期:创建 、订阅 、 执行 、销毁。
使用create创建一个Observable
const Rx = require('rxjs/Rx'); |
捕获error和complete
let source = Observable.create(observer=>{ |
rxjs交互图
- 每条线表示一个数据序列
- 每个球表示发送的数据变更,小竖线表示complete
- 方法下面表示经过map、filter等操作符处理过后产生的新序列

//序列1 |
操作符
map:对要发送的data作统一处理后再返回filter:满足条件时才发射出去toPromise:将observer转为promisedebounce:(防抖动)取一段时间内最新的数据throttle:(防抖动) 忽略这段时间,发现新值后再发送
更多,如 mapTo, scan, from ,concat, concatAll, merge, mergeAll等
结束
angular2中的HTTP模块,ionic-native中的BLE模块都默认使用了Observable
还需要要研究:
- 他的使用场景?
- 与promise相比他的优势劣势是什么?
- 未来的使用趋势如何?
参考文章
官方文档:http://reactivex.io/rxjs/